package br.com.fatecjp.pooai.gerenciador.taxi.message.parser;

import br.com.fatecjp.pooai.gerenciador.taxi.message.ConteudoMensagemAgente;
import br.com.fatecjp.pooai.gerenciador.taxi.utils.StringUtils;

public class ConteudoMensagemAgenteParser {

	public static final String SEPARADOR = "#";

	public ConteudoMensagemAgente parse(String source)
			throws IllegalArgumentException {

		ConteudoMensagemAgente conteudoMensagem = null;

		if (source != null) {

			String[] partes = StringUtils.split(source, SEPARADOR);
			if (partes != null && partes.length > 0) {
				int tipoMensagem = -1;
				try {
					tipoMensagem = Integer.parseInt(partes[0]);
				} catch (NumberFormatException ex) {
					throw new IllegalArgumentException(ex);
				}
				conteudoMensagem = new ConteudoMensagemAgente(tipoMensagem);
				if (this.hasComplemento() && partes.length > 1) {
					String[] copia = new String[partes.length - 1];
					System.arraycopy(partes, 1, copia, 0, partes.length - 1);
					conteudoMensagem
							.setConteudo(this.extrairComplemento(copia));
				}
			}

		}

		return conteudoMensagem;

	}

	public String toString(ConteudoMensagemAgente source) {

		String resultado = "";
		resultado = resultado.concat(source.getTipoMensagem() + SEPARADOR);

		if (this.hasComplemento()) {
			String complemento = this.converterComplemento(source);
			if (complemento != null) {
				resultado = resultado.concat(complemento);
			}
		}

		return resultado;

	}

	public boolean hasComplemento() {
		return false;
	}

	public Object[] extrairComplemento(String[] partes) {
		return null;
	}

	public String converterComplemento(ConteudoMensagemAgente source) {
		return null;
	}

}
